/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dio.com.controller;



import dio.com.dao.conexao.AcessoGED;
import dio.com.model.bean.Usuario;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Diógenes
 */
public class UsuarioController {

    PreparedStatement pstm;
    ResultSet rs;
    String sql = "SELECT * FROM USUARIO_0 WHERE NOME_0 = ? AND SENHA_0 = ?";
    String sql2 = "UPDATE USUARIO_0 SET SENHA2_0= ? WHERE NOME_0 = ?";
    String sql3 = "UPDATE USUARIO_0 SET LOGADO_0= ? WHERE NOME_0 = ?";
    String alterarSenha = "UPDATE usuario_0 SET SENHA_0 = ? WHERE IDUSUARIO_0 = ?";
    String listarUsuarios = "SELECT * FROM `ged-contabli`.usuario_0 ORDER BY NOME_0;";
    String inserirUsuarios = "INSERT INTO `ged-contabli`.`usuario_0` (`NOME_0`,"
            + "`SENHA2_0`,`SENHA_0`,`LOGADO_0`,`GRUPO_0`,`TELEFONE`,`DEPARTAMENTO`,`EMAIL`) VALUES (?,?,?,?,?,?,?,?);";
    String alterarUsuario = "UPDATE `ged-contabli`.`usuario_0`"
            + " SET `NOME_0` = ?,`GRUPO_0` = ?, `TELEFONE` = ?,"
            + "`DEPARTAMENTO` = ? ,`EMAIL` = ? WHERE `IDUSUARIO_0` = ?";
    String deletarUsuario = "DELETE FROM `ged-contabli`.`usuario_0` WHERE `IDUSUARIO_0` = ?;";
    AcessoGED mysql = new AcessoGED();
    int cont = 0;

    public void inserirUsuario(Usuario u) {
        try {
            pstm = mysql.conectar().prepareStatement(inserirUsuarios);
            pstm.setString(1, u.getNome());
            pstm.setInt(2, 100);
            pstm.setString(3, "contabli");
            pstm.setBoolean(4, false);
            pstm.setString(5, u.getGrupo());
            pstm.setString(6, u.getTelefone());
            pstm.setString(7, u.getDepartamento());
            pstm.setString(8, u.getEmail());            
            pstm.executeUpdate();
            mysql.desconectar();
            JOptionPane.showMessageDialog(null, u.getNome() + " inserido/a com sucesso");
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
    }

    public void alterarUsuario(Usuario u){
        try {
            pstm = mysql.conectar().prepareStatement(alterarUsuario);
            pstm.setString(1, u.getNome());
            pstm.setString(2, u.getGrupo());
            pstm.setString(3, u.getTelefone());
            pstm.setString(4, u.getDepartamento());
            pstm.setString(5, u.getEmail());            
            pstm.setInt(6, u.getId());                        
            pstm.executeUpdate();
            mysql.desconectar();
            JOptionPane.showMessageDialog(null, u.getNome() + " alterado/a com sucesso");
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
    }
    
    public void excluirUsuario(int id){
        try {
            pstm = mysql.conectar().prepareStatement(deletarUsuario);
            pstm.setInt(1, id);
            pstm.executeUpdate();
            mysql.desconectar();
            JOptionPane.showMessageDialog(null, "Usuário excluido com sucesso");
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
    }
    public List<Usuario> listarUsuarios() {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        try {
            pstm = mysql.conectar().prepareStatement(listarUsuarios);
            rs = pstm.executeQuery();
            while (rs.next()) {
                Usuario u = new Usuario();
                u.setId(rs.getInt("IDUSUARIO_0"));
                u.setNome(rs.getString("NOME_0"));
                u.setTelefone(rs.getString("TELEFONE"));
                u.setDepartamento(rs.getString("DEPARTAMENTO"));
                u.setEmail(rs.getString("EMAIL"));
                u.setGrupo(rs.getString("GRUPO_0"));
                usuarios.add(u);
            }
            mysql.desconectar();            
            return usuarios;
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
        return null;
    }

    public Usuario validarUsuario(String nome, String senha) {
        try {
            pstm = mysql.conectar().prepareStatement(sql);
            pstm.setString(1, nome);
            pstm.setString(2, senha);
            rs = pstm.executeQuery();
            Usuario u = null;
            while (rs.next()) {
                u = new Usuario();
                u.setId(rs.getInt("IdUSUARIO_0"));
                u.setNome(rs.getString("NOME_0"));
                u.setSenha(rs.getString("SENHA_0"));
                u.setLogado(rs.getBoolean("LOGADO_0"));
                u.setGrupo(rs.getString("GRUPO_0"));
                cont = rs.getInt("SENHA2_0");
            }
            mysql.desconectar();
            if (cont == 0) {
                return null;
            }
            if (u != null && !u.isLogado()) {
                decrementarContador(u);
                usuarioLogado(u);
            }
            return u;
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
        return null;
    }

    private void decrementarContador(Usuario u) {
        //Diminuindo o contador do usuário
        try {
            pstm = mysql.conectar().prepareStatement(sql2);
            cont--;
            pstm.setInt(1, cont);
            pstm.setString(2, u.getNome());
            pstm.execute();
            mysql.desconectar();
        } catch (Exception e) {
        }

    }

    private void usuarioLogado(Usuario u) {
        //Definindo o usuário como logado
        try {
            pstm = mysql.conectar().prepareStatement(sql3);
            pstm.setBoolean(1, true);
            pstm.setString(2, u.getNome());
            pstm.execute();
            mysql.desconectar();
        } catch (Exception e) {
        }

    }

    public void liberarUsuario(Usuario u) {
        //Definindo o usuário como logado
        try {
            pstm = mysql.conectar().prepareStatement(sql3);
            pstm.setBoolean(1, false);
            pstm.setString(2, u.getNome());
            pstm.execute();
            mysql.desconectar();
        } catch (Exception e) {
        }

    }

    public boolean alterarSenha(Usuario u, String novaSenha) {
        try {
            pstm = mysql.conectar().prepareStatement(alterarSenha);
            pstm.setString(1, novaSenha);
            pstm.setInt(2, u.getId());
            pstm.execute();
            mysql.desconectar();
            return true;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
        }
        return false;
    }
}
